/**
 * MDZ文件的元数据接口
 */
export interface MDZMetadata {
  /** MDZ格式版本 */
  version: string;
  /** 文档标题 */
  title?: string;
  /** 作者 */
  author?: string;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
  /** 是否加密 */
  encrypted: boolean;
  /** 校验和 */
  checksum: string;
}

/**
 * MDZ文件的资源项目接口
 */
export interface MDZAsset {
  /** 资源唯一标识符 */
  id: string;
  /** 资源在zip中的路径 */
  path: string;
  /** 原始文件名 */
  originalName: string;
  /** MIME类型 */
  mimeType: string;
  /** 文件大小（字节）*/
  size: number;
  /** 文件校验和 */
  checksum: string;
}

/**
 * MDZ文件的清单接口
 */
export interface MDZManifest {
  metadata: MDZMetadata;
  /** 主Markdown文件路径 */
  mainDocument: string;
  /** 资源列表 */
  assets: MDZAsset[];
}

/**
 * MDZ文件的内部结构
 */
export interface MDZStructure {
  /** 清单文件路径 */
  manifestPath: string;
  /** 内容目录路径 */
  contentPath: string;
  /** 资源目录路径 */
  assetsPath: string;
}

/**
 * MDZ操作错误类型
 */
export enum MDZErrorType {
  /** 文件未找到或无法访问 */
  FILE_NOT_FOUND = 'FILE_NOT_FOUND',
  
  /** 无效的MDZ格式或结构 */
  INVALID_FORMAT = 'INVALID_FORMAT',
  
  /** 加密或解密错误 */
  ENCRYPTION_ERROR = 'ENCRYPTION_ERROR',
  
  /** 校验和验证失败 */
  CHECKSUM_MISMATCH = 'CHECKSUM_MISMATCH',
  
  /** 输入/输出操作错误 */
  IO_ERROR = 'IO_ERROR',
  
  /** 未知或未指定的错误 */
  UNKNOWN_ERROR = 'UNKNOWN_ERROR',
  
  /** 权限被拒绝 */
  PERMISSION_DENIED = 'PERMISSION_DENIED',
  
  /** 内容验证错误 */
  VALIDATION_ERROR = 'VALIDATION_ERROR',
  
  /** 操作超时 */
  TIMEOUT = 'TIMEOUT'
}

/**
 * MDZ操作错误类
 */
export class MDZError extends Error {
  type: MDZErrorType;

  constructor(message: string, type: MDZErrorType = MDZErrorType.UNKNOWN_ERROR) {
    super(message);
    this.type = type;
    this.name = 'MDZError';
  }
} 